package cc.wsyw126.java.nowcoder.sword_offer;

/**
 * Created by Administrator on 2017/4/17.
 汇编语言中有一种移位指令叫做循环左移（ROL），现在有个简单的任务，就是用字符串模拟这个指令的运算结果。
 对于一个给定的字符序列S，请你把其循环左移K位后的序列输出。
 例如，字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果，即“XYZdefabc”。是不是很简单？OK，搞定它！
 */
public class LeftRotateString {
    public String LeftRotateString(String str,int n) {
        if (n<0 || str == null || str.length()== 0) return str;
        StringBuilder sb = new StringBuilder(str);
        int length = str.length();
        int i = n % length;
        if (i==0) return str;
        if (i<=length) {
            reverse(sb, 0, length-1);
            reverse(sb, length -i, length-1);
            reverse(sb, 0, length -i -1);
        }
        return sb.toString();
    }

    private void reverse(StringBuilder sb, int start, int end) {
        while (start<end) {
            char c = sb.charAt(start);
            sb.replace(start, start+1, ""+sb.charAt(end));
            sb.replace(end, end+1, String.valueOf(c));
            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        LeftRotateString leftRotateString = new LeftRotateString();
        String abcdefg = leftRotateString.LeftRotateString("abcdefg", 1);
        System.out.println("abcdefg = " + abcdefg);
    }
}
